#本例程未使用正则表达式，但是实现了文本中的字符替换。
#要想实现(1+2)*exp(4)*5替换为(1+2)*Exp[4]*5这类mma函数的外括号替换，应该得使用正则表达式。
#该程序可实现第一次匹配所在行中的对应的所有字符，之后的行直接跳过。
def string_switch(x,y,z,s=1):
    with open(x, "r", encoding="utf-8") as f:#打开文件
        #readlines以列表的形式将文件读出
        lines = f.readlines()#读取所有行到内存
 
    with open(x, "w", encoding="utf-8") as f_w:
        #定义一个数字，用来记录在读取文件时在列表中的位置
        n = 0
        #默认选项，只替换第一次匹配到的行中的字符串
        if s == 1:
            for line in lines:
                if y in line:
                    line = line.replace(y,z)
                    f_w.write(line)
                    n += 1
                    break
                f_w.write(line)
                n += 1
            #将剩余的文本内容继续输出
            for i in range(n,len(lines)):
                f_w.write(lines[i])
        #全局匹配替换
        elif s == 'g':
            for line in lines:
                if y in line:
                    line = line.replace(y,z)#不能换变量如line1,只能赋值line.
                f_w.write(line)


lis1=['exp(',')*',')/'];#这样是解决不了问题的。会将(1+2)*exp(4)*5替换为(1+2]*Exp[4]*5
lis2=['Exp[',']*',']/'];#如何解决(1+2)*exp(4)*5替换为(1+2)*Exp[4]*5

for i in lis1:#实现2个列表中对应位置元素的替换。
    string_switch('exp.txt',i,lis2[lis1.index(i)],'g')
